package com.lez.flowpractice2.download

import java.io.File

/**
 * sealed 表示是密封类，密封类，可以理解为枚举，规定了有限个类型，不可以存在其他类型，
 * 但枚举每个枚举常量只存在一个示例，但是密封类的子类可以有多个示例，所以可以将密封类看做是枚举的拓展，
 * 基于枚举，高于枚举
 * 密封类和普通类的区别，在于密封类使用了sealed修饰符，虽然密封类也可以有子类，
 * 但是所有子类都必须在与密封类自身相同的文件中声明。
 */
sealed class DownloadStates{

    object None: DownloadStates()

    data class Progress(val value:Int) : DownloadStates()
    data class Error(val throwable: Throwable) : DownloadStates()
    data class Done(val file: File): DownloadStates()

}
